A public cloud vendor may offer various servers for rent. The servers are used to host different forms of data including services being provided by various clients. When a request to host a service on a server is received by the public cloud vendor from a client, the public cloud vendor determines which of the servers to use to host the service for the client. The server may provide storage space upon which the service is stored, and a connection to a network, such as the Internet, through which the service communicates with one or more users of the service. Other physical resources provided by the server to the service include processing power, random access memory (RAM), and bandwidth through the connection to the network. The server may host the service concurrently with one or more other services. Resources of the server are finite, and thus, while the resources are being used by the service, the resources are not available to be used by the other services hosted by the server.
In order to improve performance of the services hosted by the servers, and optimize the distributed use of network bandwidth, processing and storage sources, and/or overall system load across the servers, it is desirable to efficiently select servers for hosting services.
Unfortunately, typical existing public cloud vendors are limited to selecting servers using resource-related criteria, without taking into account other relevant criteria. Thus, services and servers alike are limited in their level of performance.